package org.madmac.controller.validate;

/**
 *
 * @author atila camurca
 */
public final class Validate {

	private static final String CLASS_A = "10";
	private static final String CLASS_B = "172.16";
	private static final String CLASS_C = "192.168";

   private Validate() {
   }

   public static Integer integerValue(String param) {
      if (param != null) {
         try {
				return Integer.parseInt(param);
			} catch (NumberFormatException e) {
				return new Integer(0);
			}
      } else {
			return null;
      }
   }

	public static Long longValue(String param) {
		if (param != null) {
			try {
				return Long.parseLong(param);
			} catch (NumberFormatException e) {
				return new Long(0);
			}
		} else {
			return null;
		}
	}

	public static Double doubleValue(String param) {
		if (param != null) {
			try {
				return Double.parseDouble(param);
			} catch (NumberFormatException e) {
				return new Double(0D);
			}
		} else {
			return null;
		}
	}

	public static boolean ipAddress(String faixaIni, String faixaFim) throws Exception {
		// DONE: validar endereço IP.
		if (faixaIni == null || faixaFim == null) { return false; }
		if (faixaIni.trim().equals("") || faixaFim.trim().equals("")) { return false; }
		
		// 1. mascara
		String[] maskIni = faixaIni.split("/");
		String[] maskFim = faixaFim.split("/");

		if (maskIni[1] == null || maskFim[1] == null) { throw new Exception("A máscara deve ser informada."); }
		if (maskIni[1].trim().equals("") || maskFim[1].trim().equals("")) { throw new Exception("A máscara deve ser informada."); }

		if (!maskIni[1].equals(maskFim[1])) {
			throw new Exception("Endereços IP possuem máscaras diferentes.");
		}

		// 2. faixa
//		String[] faixaIniPart = maskIni[0].split("\\.");
//		String[] faixaFimPart = maskFim[0].split("\\.");

		if (!faixaIni.startsWith(CLASS_A) && !faixaIni.startsWith(CLASS_B) && !faixaIni.startsWith(CLASS_C)
			&& !faixaFim.startsWith(CLASS_A) && !faixaFim.startsWith(CLASS_B) && !faixaFim.startsWith(CLASS_C) ) {
			throw new Exception("Endereços IP inválidos.");
		} else if ( (faixaIni.startsWith(CLASS_A) && !faixaFim.startsWith(CLASS_A) )
			|| (!faixaIni.startsWith(CLASS_A) && faixaFim.startsWith(CLASS_A) ) ) {
			throw new Exception("Endereços IP não pertencem a mesma Classe.");
		} else if ( (faixaIni.startsWith(CLASS_B) && !faixaFim.startsWith(CLASS_B) )
			|| (!faixaIni.startsWith(CLASS_B) && faixaFim.startsWith(CLASS_B) ) ) {
			throw new Exception("Endereços IP não pertencem a mesma Classe.");
		} else if ( (faixaIni.startsWith(CLASS_C) && !faixaFim.startsWith(CLASS_C) )
			|| (!faixaIni.startsWith(CLASS_C) && faixaFim.startsWith(CLASS_C) ) ) {
			throw new Exception("Endereços IP não pertencem a mesma Classe.");
		}
		return true;
	}
}
